// Copyright (c) 2017-2022 Cloudflare, Inc.
// Licensed under the Apache 2.0 license found in the LICENSE file or at:
//     https://opensource.org/licenses/Apache-2.0

import { ok, strictEqual, throws } from 'node:assert';

import constants from 'node:constants';
import { POINT_CONVERSION_HYBRID } from 'node:constants';

export const constantsTest = {
  test() {
    [
      'RTLD_LAZY',
      'RTLD_NOW',
      'RTLD_GLOBAL',
      'RTLD_LOCAL',
      'E2BIG',
      'EACCES',
      'EADDRINUSE',
      'EADDRNOTAVAIL',
      'EAFNOSUPPORT',
      'EAGAIN',
      'EALREADY',
      'EBADF',
      'EBADMSG',
      'EBUSY',
      'ECANCELED',
      'ECHILD',
      'ECONNABORTED',
      'ECONNREFUSED',
      'ECONNRESET',
      'EDEADLK',
      'EDESTADDRREQ',
      'EDOM',
      'EDQUOT',
      'EEXIST',
      'EFAULT',
      'EFBIG',
      'EHOSTUNREACH',
      'EIDRM',
      'EILSEQ',
      'EINPROGRESS',
      'EINTR',
      'EINVAL',
      'EIO',
      'EISCONN',
      'EISDIR',
      'ELOOP',
      'EMFILE',
      'EMLINK',
      'EMSGSIZE',
      'EMULTIHOP',
      'ENAMETOOLONG',
      'ENETDOWN',
      'ENETRESET',
      'ENETUNREACH',
      'ENFILE',
      'ENOBUFS',
      'ENODATA',
      'ENODEV',
      'ENOENT',
      'ENOEXEC',
      'ENOLCK',
      'ENOLINK',
      'ENOMEM',
      'ENOMSG',
      'ENOPROTOOPT',
      'ENOSPC',
      'ENOSR',
      'ENOSTR',
      'ENOSYS',
      'ENOTCONN',
      'ENOTDIR',
      'ENOTEMPTY',
      'ENOTSOCK',
      'ENOTSUP',
      'ENOTTY',
      'ENXIO',
      'EOPNOTSUPP',
      'EOVERFLOW',
      'EPERM',
      'EPIPE',
      'EPROTO',
      'EPROTONOSUPPORT',
      'EPROTOTYPE',
      'ERANGE',
      'EROFS',
      'ESPIPE',
      'ESRCH',
      'ESTALE',
      'ETIME',
      'ETIMEDOUT',
      'ETXTBSY',
      'EWOULDBLOCK',
      'EXDEV',
      'PRIORITY_LOW',
      'PRIORITY_BELOW_NORMAL',
      'PRIORITY_NORMAL',
      'PRIORITY_ABOVE_NORMAL',
      'PRIORITY_HIGH',
      'PRIORITY_HIGHEST',
      'SIGHUP',
      'SIGINT',
      'SIGQUIT',
      'SIGILL',
      'SIGTRAP',
      'SIGABRT',
      'SIGIOT',
      'SIGBUS',
      'SIGFPE',
      'SIGKILL',
      'SIGUSR1',
      'SIGSEGV',
      'SIGUSR2',
      'SIGPIPE',
      'SIGALRM',
      'SIGTERM',
      'SIGCHLD',
      'SIGCONT',
      'SIGSTOP',
      'SIGTSTP',
      'SIGTTIN',
      'SIGTTOU',
      'SIGURG',
      'SIGXCPU',
      'SIGXFSZ',
      'SIGVTALRM',
      'SIGPROF',
      'SIGWINCH',
      'SIGIO',
      'SIGINFO',
      'SIGSYS',
      'UV_FS_SYMLINK_DIR',
      'UV_FS_SYMLINK_JUNCTION',
      'O_RDONLY',
      'O_WRONLY',
      'O_RDWR',
      'UV_DIRENT_UNKNOWN',
      'UV_DIRENT_FILE',
      'UV_DIRENT_DIR',
      'UV_DIRENT_LINK',
      'UV_DIRENT_FIFO',
      'UV_DIRENT_SOCKET',
      'UV_DIRENT_CHAR',
      'UV_DIRENT_BLOCK',
      'S_IFMT',
      'S_IFREG',
      'S_IFDIR',
      'S_IFCHR',
      'S_IFBLK',
      'S_IFIFO',
      'S_IFLNK',
      'S_IFSOCK',
      'O_CREAT',
      'O_EXCL',
      'UV_FS_O_FILEMAP',
      'O_NOCTTY',
      'O_TRUNC',
      'O_APPEND',
      'O_DIRECTORY',
      'O_NOFOLLOW',
      'O_SYNC',
      'O_DSYNC',
      'O_SYMLINK',
      'O_NONBLOCK',
      'S_IRWXU',
      'S_IRUSR',
      'S_IWUSR',
      'S_IXUSR',
      'S_IRWXG',
      'S_IRGRP',
      'S_IWGRP',
      'S_IXGRP',
      'S_IRWXO',
      'S_IROTH',
      'S_IWOTH',
      'S_IXOTH',
      'F_OK',
      'R_OK',
      'W_OK',
      'X_OK',
      'UV_FS_COPYFILE_EXCL',
      'COPYFILE_EXCL',
      'UV_FS_COPYFILE_FICLONE',
      'COPYFILE_FICLONE',
      'UV_FS_COPYFILE_FICLONE_FORCE',
      'COPYFILE_FICLONE_FORCE',
      'OPENSSL_VERSION_NUMBER',
      'SSL_OP_ALL',
      'SSL_OP_ALLOW_NO_DHE_KEX',
      'SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION',
      'SSL_OP_CIPHER_SERVER_PREFERENCE',
      'SSL_OP_CISCO_ANYCONNECT',
      'SSL_OP_COOKIE_EXCHANGE',
      'SSL_OP_CRYPTOPRO_TLSEXT_BUG',
      'SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS',
      'SSL_OP_LEGACY_SERVER_CONNECT',
      'SSL_OP_NO_COMPRESSION',
      'SSL_OP_NO_ENCRYPT_THEN_MAC',
      'SSL_OP_NO_QUERY_MTU',
      'SSL_OP_NO_RENEGOTIATION',
      'SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION',
      'SSL_OP_NO_SSLv2',
      'SSL_OP_NO_SSLv3',
      'SSL_OP_NO_TICKET',
      'SSL_OP_NO_TLSv1',
      'SSL_OP_NO_TLSv1_1',
      'SSL_OP_NO_TLSv1_2',
      'SSL_OP_NO_TLSv1_3',
      'SSL_OP_PRIORITIZE_CHACHA',
      'SSL_OP_TLS_ROLLBACK_BUG',
      'ENGINE_METHOD_RSA',
      'ENGINE_METHOD_DSA',
      'ENGINE_METHOD_DH',
      'ENGINE_METHOD_RAND',
      'ENGINE_METHOD_EC',
      'ENGINE_METHOD_CIPHERS',
      'ENGINE_METHOD_DIGESTS',
      'ENGINE_METHOD_PKEY_METHS',
      'ENGINE_METHOD_PKEY_ASN1_METHS',
      'ENGINE_METHOD_ALL',
      'ENGINE_METHOD_NONE',
      'DH_CHECK_P_NOT_SAFE_PRIME',
      'DH_CHECK_P_NOT_PRIME',
      'DH_UNABLE_TO_CHECK_GENERATOR',
      'DH_NOT_SUITABLE_GENERATOR',
      'RSA_PKCS1_PADDING',
      'RSA_NO_PADDING',
      'RSA_PKCS1_OAEP_PADDING',
      'RSA_X931_PADDING',
      'RSA_PKCS1_PSS_PADDING',
      'RSA_PSS_SALTLEN_DIGEST',
      'RSA_PSS_SALTLEN_MAX_SIGN',
      'RSA_PSS_SALTLEN_AUTO',
      'defaultCoreCipherList',
      'TLS1_VERSION',
      'TLS1_1_VERSION',
      'TLS1_2_VERSION',
      'TLS1_3_VERSION',
      'POINT_CONVERSION_COMPRESSED',
      'POINT_CONVERSION_UNCOMPRESSED',
      'POINT_CONVERSION_HYBRID',
    ].forEach((key) => {
      ok(key in constants);
    });

    strictEqual(constants.POINT_CONVERSION_HYBRID, POINT_CONVERSION_HYBRID);
    throws(
      () => {
        constants.POINT_CONVERSION_HYBRID = 'abc';
      },
      {
        message: /read only property/,
      }
    );
    strictEqual(constants.POINT_CONVERSION_HYBRID, POINT_CONVERSION_HYBRID);
  },
};
